home *** CD-ROM | disk | FTP | other *** search
- #include "MyHeader.h"
-
- // = v1 * v2
- float MyDotProduct(MyVector * v1, MyVector * v2)
- {
- return v1->x * v2->x + v1->y * v2->y + v1->z * v2->z;
- }
-
-
- // v3 = v1 - v2
- void MyVectorSubtract(MyVector * v1, MyVector * v2, MyVector * v3)
- {
- v3->x = v1->x - v2->x;
- v3->y = v1->y - v2->y;
- v3->z = v1->z - v2->z;
- }
-
- // v3 = v1 + v2
- void MyVectorAdd(MyVector * v1, MyVector * v2, MyVector * v3)
- {
- v3->x = v1->x + v2->x;
- v3->y = v1->y + v2->y;
- v3->z = v1->z + v2->z;
- }
-
- // v2 = f * v1
- void MyVectorMultiply(float f, MyVector * v1, MyVector * v2)
- {
- v2->x = f * v1->x;
- v2->y = f * v1->y;
- v2->z = f * v1->z;
- }
-
- // r is a reflection of l through n
- // R = 2(N * L)N - L
- // taken from 3D Computer Graphics by Alan Watt, p19
- // vectors must be normalized first, i think
- void MyCalculateReflection(MyVector * l, MyVector * n, MyVector * r)
- {
- MyVector temp;
-
- /////
-
- MyVectorMultiply(MyDotProduct(l, n) * 2, n, &temp);
- MyVectorSubtract(&temp, l, r);
- }
-
- // v3 = v1 x v2
- void MyVectorCrossProduct(MyVector * v1, MyVector * v2, MyVector * v3)
- {
- MyVector vt;
-
- vt.x = v1->y * v2->z - v1->z * v2->y;
- vt.y = v1->z * v2->x - v1->x * v2->z;
- vt.z = v1->x * v2->y - v1->y * v2->x;
-
- *v3 = vt;
- }
-
- float MyVectorLength(MyVector * v1)
- {
- return HYPOT3(v1->x, v1->y, v1->z);
- }
-
-
- float MyVectorDistance(const MyVector * v1, const MyVector * v2)
- {
- return HYPOT3(v1->x - v2->x, v1->y - v2->y, v1->z - v2->z);
- }
-
-
- float MyVectorNormalize(MyVector * v1, MyVector * v2)
- {
- float l;
-
- /****/
-
- l = MyVectorLength(v1);
- v2->x = v1->x / l;
- v2->y = v1->y / l;
- v2->z = v1->z / l;
-
- }
-